import os
from plugin_interface import PluginInterface
from language_manager import LanguageManager
import tkinter as tk
class LanguagePlugin(PluginInterface):
    """语言插件"""
    def __init__(self):
        self.app = None
        self.lang_dir = None
        self.current_language = None
        self.language_changed = False
        self.language_manager = None
    
    def initialize(self, app):
        """初始化插件"""
        self.app = app
        self.lang_dir = os.path.join("plugins", "config", "lang")
        os.makedirs(self.lang_dir, exist_ok=True)
        
        # 创建语言管理器
        self.language_manager = LanguageManager(self.lang_dir)
        
        # 查找当前启用的语言
        self._find_current_language()
        
        # 如果有当前语言，加载它
        if self.current_language:
            self.language_manager.load_language(self.current_language)
    
    def on_ui_ready(self):
        """UI就绪后添加菜单项"""
        self._add_menu_item()
    
    def _find_current_language(self):
        """查找当前启用的语言"""
        if not os.path.exists(self.lang_dir):
            return
        
        # 查找所有启用的语言
        enabled_language = None
        
        for item in os.listdir(self.lang_dir):
            if item.endswith('.lang') and not item.endswith('.disabled'):
                if enabled_language:
                    # 如果已经有启用的语言，禁用当前找到的
                    old_path = os.path.join(self.lang_dir, item)
                    new_path = os.path.join(self.lang_dir, f"{item}.disabled")
                    os.rename(old_path, new_path)
                    print(f"发现多个启用的语言，已禁用: {item}")
                else:
                    enabled_language = item
        
        self.current_language = enabled_language
    
    def _add_menu_item(self):
        """添加菜单项"""
        # 在File菜单中添加语言选项
        self.app.file_menu.add_separator()
        current_lang_name = self.current_language.replace('.lang', '') if self.current_language else "未设置"
        
        # 使用语言管理器获取本地化文本
        lang_text = self.language_manager.get_text("menu.language", "语言 ({current})")
        lang_text = lang_text.format(current=current_lang_name)
        
        self.app.file_menu.add_command(label=lang_text, command=self._open_language_manager)
    
    def _open_language_manager(self):
        """打开语言管理窗口"""
        from windows import LanguageManagerWindow
        
        def on_close(language_changed):
            self.language_changed = language_changed
        
        LanguageManagerWindow(self.app.window, self.lang_dir, self._on_language_selected, on_close)
    
    def _on_language_selected(self, language_file):
        """语言选择回调"""
        if not language_file:
            return
            
        # 禁用所有当前启用的语言
        self._disable_all_languages()
        
        # 启用新选择的语言
        lang_path = os.path.join(self.lang_dir, language_file)
        if lang_path.endswith('.disabled'):
            new_path = lang_path[:-9]
            os.rename(lang_path, new_path)
            print(new_path)
            self.current_language = os.path.basename(new_path)
        else:
            self.current_language = language_file
        
        # 加载新语言
        self.language_manager.load_language(self.current_language)
        
        # 更新菜单项
        for i in range(self.app.file_menu.index(tk.END), -1, -1):
            if "语言 (" in self.app.file_menu.entrycget(i, "label"):
                current_lang_name = self.current_language.replace('.lang', '') if self.current_language else "未设置"
                
                # 使用语言管理器获取本地化文本
                lang_text = self.language_manager.get_text("menu.language", "语言 ({current})")
                lang_text = lang_text.format(current=current_lang_name)
                
                self.app.file_menu.entryconfig(i, label=lang_text)
                break
        
        # 返回是否更改了语言
        return True
    
    def _disable_all_languages(self):
        """禁用所有语言"""
        if not os.path.exists(self.lang_dir):
            return
            
        for item in os.listdir(self.lang_dir):
            if item.endswith('.lang') and not item.endswith('.disabled'):
                old_path = os.path.join(self.lang_dir, item)
                new_path = os.path.join(self.lang_dir, f"{item}.disabled")
                os.rename(old_path, new_path)
